/**
 * 认证相关工具函数
 */

import router from '@/router'
import { ElMessage } from 'element-plus'

/**
 * 获取存储的token
 * @returns {string|null} token或null
 */
export const getToken = () => {
  try {
    const userInfo = localStorage.getItem('userInfo')
    if (userInfo) {
      const userData = JSON.parse(userInfo)
      return userData?.userInfo?.token || null
    }
  } catch (error) {
    console.warn('获取token失败:', error)
    clearAuth()
  }
  return null
}

/**
 * 获取用户信息
 * @returns {object|null} 用户信息或null
 */
export const getUserInfo = () => {
  try {
    const userInfo = localStorage.getItem('userInfo')
    if (userInfo) {
      const userData = JSON.parse(userInfo)
      return userData?.userInfo || null
    }
  } catch (error) {
    console.warn('获取用户信息失败:', error)
    clearAuth()
  }
  return null
}

/**
 * 检查是否已登录
 * @returns {boolean} 是否已登录
 */
export const isAuthenticated = () => {
  return !!getToken()
}

/**
 * 清除认证信息并重定向到登录页
 * @param {string} message 提示信息
 */
export const clearAuth = (message = '登录已过期，请重新登录') => {
  // 清除本地存储
  localStorage.removeItem('userInfo')
  
  // 显示提示信息
  if (message) {
    ElMessage.error(message)
  }
  
  // 重定向到登录页面
  const currentRoute = router.currentRoute.value
  if (currentRoute.path !== '/login') {
    router.push('/login')
  }
}

/**
 * 设置用户信息
 * @param {object} userInfo 用户信息
 */
export const setUserInfo = (userInfo) => {
  try {
    localStorage.setItem('userInfo', JSON.stringify({ userInfo }))
  } catch (error) {
    console.error('保存用户信息失败:', error)
  }
}

/**
 * 处理API响应中的认证错误
 * @param {object} error 错误对象
 * @returns {boolean} 是否为认证错误
 */
export const handleAuthError = (error) => {
  if (error.response && error.response.status === 401) {
    clearAuth()
    return true
  }
  return false
}
